package zxj.baidu.map.api;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import zxj.baidu.map.utils.HttpClientUtils;
import zxj.baidu.map.utils.MapUtils;

/**
 * 百度地图地点检索API
 * 
 * @author zhuxuejiang
 *
 */
@Component
public class SearchApi {

	private static final Logger LOGGER = LoggerFactory.getLogger(SearchApi.class);

	private static final String URL = "http://api.map.baidu.com/place/v2/search?";

	@Value("${zxj.baidu.lbsyun.ak}")
	private String ak;

	/**
	 * 行政区划区域检索
	 * 
	 * @param region   检索行政区划区域
	 * @param query    检索关键字。行政区划区域检索不支持多关键字检索。
	 * @param pageSize 单次召回POI数量，默认为10条记录，最大返回20条。多关键字检索时，返回的记录数为关键字个数*page_size。
	 * @param pageNum  分页页码，默认为0,0代表第一页，1代表第二页，以此类推。
	 * @return 接口返回的数据包
	 * @throws Exception
	 */
	public Map<String, Object> regionSearch(String region, String query, int pageSize, int pageNum) throws Exception {
		pageSize = pageSize < 1 || pageSize > 20 ? 10 : pageSize;
		pageNum = pageNum < 0 ? 0 : pageNum;

		StringBuilder sb = new StringBuilder(URL);
		sb.append("ak=").append(ak);
		sb.append("&tag=加油加气站");
		sb.append("&city_limit=true");
		sb.append("&output=json");
		sb.append("&scope=1");
		sb.append("&region=").append(region);
		sb.append("&query=").append(query);
		sb.append("&page_size=").append(pageSize);
		sb.append("&page_num=").append(pageNum);

		String response = HttpClientUtils.get(sb.toString());
		LOGGER.debug("regionSearch result \r\n" + response);
		return MapUtils.jsonString2Map(response);
	}
}
